<?php


namespace app\common\library;

// 必须有，且内存不小于1024M
//ini_set('memory_limit', '1024M');

use Fukuball\Jieba\Jieba;  //必须
use Fukuball\Jieba\Finalseg;
use Fukuball\Jieba\JiebaAnalyse;   //关键词提取


/**
 * 分词搜索数据组装
*/
class Search
{


    public function __construct()
    {
//        Jieba::init(); //必须
//        Finalseg::init();
//        JiebaAnalyse::init();
    }

    /**
     * 自定义分词
     */
    public static function getWord($search = ''): array
    {
        $length = mb_strlen($search, 'utf-8');//计算文字长度

        $titleArray = [];
        $titleArrays = [];

        for ($i = 0; $i < $length; $i++) {
            $titleArray[] = mb_substr($search, $i, 1, 'utf-8');//分字得到数组【‘维’，‘修’，‘工’】
        }
        $key = '';
        foreach ($titleArray as $k => &$v) {//二次循环得到词语【‘维’，‘维修’，‘维修工’】
            $key .= $v;
            $titleArrays[] = $key;
        }
        return $titleArrays;
    }


    /**
     * 中文分词
     * 需要实例化请求
     * @param string $search 需要分词的字符串
     */
    public function searchPackage($search): array
    {
        if (!empty($search)) {
            // 使用关键词提取，返回 5 个 TF/IDF 权重最大的关键词，默认为 20 个
            $fenci =  JiebaAnalyse::extractTags($search, 10);
            $keywords_fenci = [];
            foreach ($fenci as $key => $value) {
                // 将关键词组合为 Like 所需格式的数组
                $keywords_fenci[] = '%' . $key. '%';
            }
            return $keywords_fenci;
        }
        return [];
    }

    /**
     * 中文分词
     * 注意：必须是 utf-8 字符串
     */
    public function fenci()
    {
        //默认精确模式
        $seg_list = Jieba::cut("我来到北京清华大学");
        dump($seg_list);
        //全局模式
        $seg_list = Jieba::cut("我来到北京清华大学",true);
        dump($seg_list);
        //搜索引擎模式
        $seg_list = Jieba::cutForSearch("小明硕士毕业于中国科学院计算所，后在日本京都大学深造");
        dump($seg_list);
    }

    /**
     * 关键词提取
     * 注意：必须是 utf-8 字符串
     */
    public function tiQu($content)
    {
        //越小精确度越高|提取的关键词越准|默认20
        $top_k = 10;
//        $content = "我来到北京清华大学";
        //关键词提取
        $tags = JiebaAnalyse::extractTags($content, $top_k);
        dump($tags);
    }

    /**
     * 导入自定义词库并分词
     */
    public function importCikuFenci()
    {
        //导入自定义的词库（一个词语占一行）
        jieba::loadUserDict("../public/upload/ciku.txt");///重点在这里，导入自定义的词库
        //词库中就会有你导入的词库
        $seg_list = Jieba::cut("结巴中文分词:做最好的中文分词!");
        dump($seg_list);
    }


    /**
     * 导入自定义词库并提取关键词
     */
    public function importCikuTiqu()
    {
        //导入自定义的词库（一个词语占一行）
        jieba::loadUserDict("../public/upload/ciku.txt");//自定义的词语
        //越小精确度又高|提取的关键词越准|默认20
        $top_k = 10;
        $content = "这是自定义的词库并且提取自定义关键词";
        //定义截断性比重占比分析(有问题，无法获取到自定义关键词)
        JiebaAnalyse::setStopWords('../public/upload/stop_words.txt');
        //关键词提取
        $tags = JiebaAnalyse::extractTags($content, $top_k);
        dump($tags);
    }
}